package com.demo.order.feign;

import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

import java.util.HashMap;
import java.util.Map;

/**
 * 商品服务Feign客户端降级处理
 * 实现熔断降级逻辑
 */
@Slf4j
@Component
public class ProductFeignClientFallback implements ProductFeignClient {

    /**
     * 扣减库存降级处理
     * @param productId 商品ID
     * @param quantity 扣减数量
     * @return 降级响应
     */
    @Override
    public Map<String, Object> reduceStock(Long productId, Integer quantity) {
        log.error("调用商品服务扣减库存失败，触发降级处理，productId: {}, quantity: {}", productId, quantity);
        
        Map<String, Object> result = new HashMap<>();
        result.put("success", false);
        result.put("message", "商品服务暂时不可用，请稍后重试");
        result.put("fallback", true);
        return result;
    }

    /**
     * 回滚库存降级处理
     * @param productId 商品ID
     * @param quantity 回滚数量
     * @return 降级响应
     */
    @Override
    public Map<String, Object> rollbackStock(Long productId, Integer quantity) {
        log.error("调用商品服务回滚库存失败，触发降级处理，productId: {}, quantity: {}", productId, quantity);
        
        Map<String, Object> result = new HashMap<>();
        result.put("success", false);
        result.put("message", "商品服务暂时不可用，库存回滚失败");
        result.put("fallback", true);
        return result;
    }

    /**
     * 获取商品信息降级处理
     * @param productId 商品ID
     * @return 降级响应
     */
    @Override
    public Map<String, Object> getProductInfo(Long productId) {
        log.error("调用商品服务获取商品信息失败，触发降级处理，productId: {}", productId);
        
        Map<String, Object> result = new HashMap<>();
        result.put("success", false);
        result.put("message", "商品服务暂时不可用，无法获取商品信息");
        result.put("fallback", true);
        result.put("productId", productId);
        result.put("productName", "未知商品");
        result.put("price", 0);
        return result;
    }
}